/**
 * Execution recoit les ordres provenant du serveur d'acquisition, traite les transactions
 * et envoie les accusés de réception.
 * @author: François Colombel (pour la partie du traitement du message), Christopher Rabotin (pour la communication par sockets)
 */
#ifndef EXECUTION_
#define EXECUTION_

#include "casual_includes.h"
#include "../libbourse/alea.h"
#include "../libcomm/logger.h"
#include "../libcomm/message.h"
#include "../libcomm/communication.h"
#include "../libbourse/PrixAchatVente.h"

typedef struct {
	//[numéro de l'action][caractères]
	char** id;
	char** val;
	char** stock;
}action;


/**
 * Permet de démarrer un serveur d'exécution
 * @param mdl module lié au serveur d'exécution
 * @param port port sur lequel le serveur se bind
 * @return void: le serveur est forké.
 *
 * <br><b>Exemple d'utilisation:</b>
 *<pre> module *exect1=init_module("Exécution 01", exec, 1);
 launch_execution(exect1, 1202);</pre>
 */
void launch_execution(module* mdl, const int port);

/**
 * Permet de traiter un message reçu.
 * @param mess le message sous forme msg
 * @param stock_restant le stock restant pour l'action concernée
 * @param act l'action concernée par l'ordre
 * @param nombre_actions nombre total d'actions pour cette action-ci
 * @return l'accusé de réception
 */
msg* execution_msg(msg *mess, int *stock_restant, action *act, int nombre_actions);

/**
 * Permet de traiter un message reçu.
 * @param emetteur émetteur du message
 * @param type_transaction type du message
 * @param id_action_ordre identificateur de l'action
 * @param quantite_ordre valeur associée au message
 * @param stock_restant le stock restant pour l'action concernée
 * @param act l'action concernée par l'ordre
 * @param nombre_actions nombre total d'actions pour cette action-ci
 * @return l'accusé de réception
 */
msg* execution(char* emetteur,char* type_transaction,char* id_action_ordre,char* quantite_ordre,int *stock_restant, action *act, int nombre_actions);

#endif /*EXECUTION_*/
